//
//  AFFDataText.h
//  AnyfishApp
//
//  Created by bob on 14-8-25.
//  Copyright (c) 2014年 Anyfish. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "AFFData.h"

// 主线程空闲才触发；避免滑动等操作时卡顿
#import "NSTimer+Blocks.h"

#pragma mark - 拉取数据配置key设置
#define kMsgText_Config_Temple_Tool    @"MsgText_Config_Temple_Tool"     // 鱼寺中的

#define kRichPlayDelay_Short       3.5
#define kRichPlayDelay_Common      5.0
#define kRichPlayDelay_Long        8.0

typedef NS_ENUM(U32, AFEPartionType)
{
    kPartionTypeText = 0,   ///< 纯文本
    // 5素
    kPartionTypePlayer,     ///< 5素用户，或>0的code都会属于个人，所以特殊拉取得要根据配置区分
    kPartionTypeEntity,     ///< 5素商家
    kPartionTypeLand,       ///< 5素土地
    kPartionTypeFamous,     ///< 5素名
    kPartionTypeProduct,    ///< 5素产品
    
    kPartionTypeCompany = 10,    ///< 个人工作圈单独获取名称
    kPartionTypeWorkRole = 11,    ///< 工作圈职位名称，需要获取商家类型判断
    
    kPartionTypeClub,       ///< 鱼吧
    kPartionTypeTicket,     ///< 优惠券
    kPartionTypeRoom,       ///< 群组
    kPartionTypePaper,      ///< 鱼报
    kPartionTypeLive,       ///< 社区
    kPartionTypeResident,       ///< 社区居民
    
//    KPartionTypeFish = 20,       ///< 鱼(属于5素产品）
//    KPartionTypeFishPod,    ///< 鱼杆
    kPartionTypeLocation,    ///< 地理位置
    kPartionTypeLocationShort, ///< 地理位置
    
    kPartionTypeSeal,       ///< 鱼章
    kPartionTypeEntitySeal,       ///< 商家船
    kPartionTypeSealSigned,       ///< 鱼章被贴的人
    
    // player特殊的，仅对名称有效
    kPartionTypePlayerNoteName = 30,           ///< 备注：人默认，获取不到放到kPartionTypePlayer上
    kPartionTypePlayerNickName,           ///< 昵称
    kPartionTypePlayerRoomNickName,       ///< 群昵称
    kPartionTypePlayerRoomWorkerName,     ///< 工作圈名称
    
    kPartionTypeStreet = 50,     ///< 街项道名称
    kPartionTypeStreetProduct,     ///< 后街产品 头像处理比较特殊
    kPartionTypeStreetBate,     ///< 后街套餐 头像处理比较特殊
    
    kPartionTypeGMCircle = 60,      ///< 商圈信息
    kPartionTypeGMTBao = 61,      ///< 淘宝客数据信息
    
    // 特殊显示部分
    kPartionTypeC_Text = 80,             ///< 文本
    kPartionTypeC_Button,           ///< 按钮
    kPartionTypeC_Label,            ///< 文本
    kPartionTypeC_View,             ///< 特殊view
    kPartionTypeC_Image,            ///< 图片
};

@interface AFFDataPartion : NSObject

@property (nonatomic,assign) AFEPartionType type;   ///< 对象属性
@property (nonatomic, readonly) U8 afType;    ///< 百鱼type，对应code
@property (nonatomic, assign) U64 landCode;    ///< 获取经纬度的landcode
@property (nonatomic,assign) U64 code;              ///< CODE1 或者鱼的大类
@property (nonatomic,assign) U64 code2;             ///< 鱼的小类
@property (nonatomic, assign) U64               elementCode;    ///< 用于判断的数据code，比如拉取群成员显示名称时要用到的群code，在初始化数据时就放上去，方便统一处理
@property (nonatomic,assign) NSRange range;         ///< 显示文本占用的位置
@property (nonatomic,strong) NSString * textShow;   ///< 显示的文本
@property (nonatomic,strong) NSString * textDecode; ///< 解析的文本 空的话表示需要拉去
@property (nonatomic,strong) NSString * textTag;    ///< 解析后附加文本 可带给部分数据做保存：如地理位置的作用区域
@property (nonatomic,strong) NSDictionary *textConfig; ///< 用于拉取判断的配置文件
@property (nonatomic, readonly) NSString *textAnalyze;    ///< 解析显示时用的，表情解析类中
@property (nonatomic, weak) NSData *dataIcon;    ///< 获取到的图片
@property (nonatomic, assign) BOOL hasIcon;    ///< 是否有图片
@property (nonatomic, readonly) NSString *imageName;    ///< 图片全路径名称
@property (nonatomic, assign) BOOL isReplaced;    ///< 是否用作替换的，消息列表判断用
@property (nonatomic, assign) BOOL isChecked;    ///< 是否已经尝试过了（消息列表临时用，其他地方使用要先交流）

// 特殊值判断
@property (nonatomic, readonly) BOOL isFish;    ///< 是否鱼
@property (nonatomic, readonly) BOOL isCar;    ///< 是否汽车

@property (nonatomic, assign) BOOL needPull;    ///< 默认NO，有时候比如备注、群昵称等没获取到时需要用昵称替代，会导目标名称一直获取不到。这里添加二次获取机会

@property (nonatomic, assign) BOOL hasCheckIcon;    ///< 默认NO，用于缓存已经检查过的头像获取，不二次获取；如果头像变化通过界面数据二次刷新触发




/** add by lsb 2014-11-07 文本颜色值，如果需要才赋值。nil时文本颜色有控件控制 */
/** 文字颜色 */
//@property (nonatomic, strong) NSString  * colorStr;
@property (nonatomic, strong) UIColor   *color;    ///< 文字颜色
/** 字体大小 */
@property (nonatomic, assign) int       fontSize;

@property (nonatomic, assign) BOOL showEmptySeal;    ///< 是否显示空章，默认NO


// 特殊部分
@property (nonatomic, strong) UIView *view;    ///< 自定义view
@property (nonatomic, strong) NSString *containTitle;    ///< 按钮名称，label.text
@property (nonatomic, strong) NSString *imgName;    ///< 图片名称
@property (nonatomic, strong) UIColor *colorBg;    ///< 背景色
@property (nonatomic, assign) NSInteger tag;    ///< 响应判断用的
@property (nonatomic, assign) float corner;    ///< 圆角
@property (nonatomic, strong) UIColor *colorBorder;
@property (nonatomic, assign) CGFloat borderWidth;   
@property (nonatomic, strong) UIFont *font;    ///< 字体
@property (nonatomic, assign) CGSize size;    ///< 大小，没有设置会根据字体等控制
@property (nonatomic, assign) U8    alignment;  ///< 对齐方式0=top 底部齐平 向上伸展, 1=center 中心齐平,2=bottom 顶部齐平 向下伸展

@property (nonatomic, strong) NSMutableArray *mArrParse;    ///< 解析后数据，只用于单个解析partion时使用

- (id)copySelf;

- (BOOL)saveIcon;
- (void)delIcon;

@end

/**
    *.名称、头像缓存办法（结构 @[@{@"key=@(code)":@{@"kPartion":@"name or imagedata"}, },@[]]
    1.key - 不同的类型都使用code作为key
    2.value - 包含获取类型，以及获取的名字或头像
    3.使用时 - 通过判断类型+code判断是否存在缓存
 */


/**
 * player显示名称处理类型，获取时按需使用
 0只要昵称 1只要备注 2只要群成员昵称 3群成员昵称优先 4好友备注优先
 */
typedef NS_ENUM(U8, AFFPlayerShowNameType) {
    EPlayerShow_NickName,               ///< 只要昵称
    EPlayerShow_NoteName,               ///< 只要备注，可能没有
    EPlayerShow_NickNameMember,         ///< 只要群成员对应群昵称，可能没有
    EPlayerShow_NickNameMemberFirst,    ///< 群成员对应群昵称优先，群昵称>好友备注>昵称
    EPlayerShow_NoteNameFirst,           ///< 好友备注优先，没有就获取昵称
    
    EPlayerShow_WorkerNameFirst,        ///< UI自己判断显示职员名称优先
};

/**
 * 默认替代图标大小类型（百鱼系统实体对象）
 */
typedef NS_ENUM(U8, AFFIconSize) {
    EIconSize_default,  ///< 获取时根据类型动态判断
    EIconSize_58 = 1,   ///< 人、群、鱼
    EIconSize_72,       ///< 人、群默认
    EIconSize_80,       ///< 人
    EIconSize_100,      ///< 图片获取默认
    EIconSize_108,      ///< 人
    EIconSize_118,      ///< 人
    EIconSize_144,      ///< 图片获取，圈子单张图片
    EIconSize_154,      ///< 图片获取，查看大图
    EIconSize_298,
};

@interface AFFDataText : NSObject<NSCoding>

@property (nonatomic, strong) NSMutableArray    *array;         ///< 组合文本包含的对象(AFFDataPartion)
@property (nonatomic, readonly) NSString *showText;    ///< 用于显示的文本
@property (nonatomic, readonly) NSString *showNoPlaceText;    ///< 用于显示的文本

@property (nonatomic, assign, readonly) BOOL     needPullText;       ///< 是否需要拉取 昵称 or fishName
@property (nonatomic, assign, readonly) BOOL     needPullIcon;    ///< 是否需要拉取头像
@property (nonatomic, assign) BOOL              hadAnalyzed;    ///< 是否已经解析过，拉取变化后需要重置
@property (nonatomic, assign, readonly) BOOL    isEmpty;        ///< 是否有显示文本

@property (nonatomic, strong) AFFData *dataPulled;    ///< 拉取到的数据对象，缓存下来会用到如获取到的群对象、鱼对象

@property (nonatomic, strong) UIImage         *imageIcon;     ///< 基础数据头像（人、群、商家等），与对应名称拉取的code关联的
@property (nonatomic, strong) UIImage *imgSet;    ///< 直接设置的图片，外部不要使用；或者特殊缓存处理比如url获取图片，获取到后赋值
//@property (nonatomic, strong) NSData            *dataIcon;      ///< 数据
@property (nonatomic, assign) AFFIconSize       iconSize;       ///< 头像类型默认为2倍图，高分辨率手机默认头像要大点
@property (nonatomic, assign) U64               elementCode;    ///< 用于判断的数据code，比如拉取群成员显示名称时要用到的群code，在初始化数据时就放上去，方便统一处理
@property (nonatomic, assign) U32 roomToken;    
@property (nonatomic, readonly) U64             dataCode;    ///< 拉取名称时，对象code；或第一个有code的数据；必须明确知道才使用，否则这个数据是不确定的
@property (nonatomic, assign) AFFPlayerShowNameType showNameType;    ///< 显示名称类型，默认EPlayerShow_NoteNameFirst
@property (nonatomic, assign) U8 imgStyle;    ///< 下载图片类型 默认EImageStyle_Thumb
@property (nonatomic, readonly) U32 imgDlType;    ///< 图片下载类型 默认EImageDLType_Player
@property (nonatomic, assign) U8 getType;    ///< 获取方式，默认本地或服务器

// 下面定义是直接绘制文字用的，不依赖鱼UI控件
/** 默认字体 */
//@property (nonatomic, assign) int               fontSize;
//@property (nonatomic, strong) NSString          *fontName;
@property (nonatomic, strong) UIFont            *font;     ///< 通用字体
@property (nonatomic, strong) UIColor           *color;    ///< 通用文字颜色

// 下面是缓存已经解析过的数据，与富文本控件配套使用，减少二次解析
/*********************** 绘制位置、范围控制 ***********************/
@property (nonatomic, assign)  CGFloat             heightSupport;  ///< 内容绘制支持的高度，由用户传入，否则内部计算=heightUsed
@property (nonatomic, assign)  CGFloat             widthSupport;   ///< 内容绘制支持的宽度，由用户传入，否则内部计算=widthUsed
@property (nonatomic, assign)  CGFloat             widthUsed;      ///< 内容绘制使用宽度，相对于给出的最大宽度
@property (nonatomic, assign)  CGFloat             heightUsed;     ///< 内容绘制使用的高度
@property (nonatomic, assign)  CGRect              rFrame;         ///< 当前view绘制范围，在重绘时如果需要修改此值
@property (nonatomic, assign)  CGPoint             original;       ///< 原始绘制起点
@property (nonatomic, assign)  CGSize              sizeUsed;       ///< 使用大小，在直接计算文本大小时常用
@property (nonatomic, assign)  CGFloat             lineSpace;      ///< 行间距
@property (nonatomic, assign)  NSTextAlignment     textAlignment;  ///< 对齐方式
@property (nonatomic, assign)  AFFRichTextType     parseType;      ///< 控制解析类型如html、电话号码等
@property (nonatomic, assign) BOOL parseExp;    ///< 是否解析表情（目前仅有动画表情要处理）默认YES
@property (nonatomic, assign)  NSInteger           numberOfline;   ///< 绘制行数默认为1，0代表不限制
@property (nonatomic, assign)  NSInteger           numberOflineDrawed; ///< 已绘制数量
@property (nonatomic, assign, readonly)  BOOL                isNeedMorelines; ///< 是否超出了限制的行数


/*********************** 绘制控制信息 ***********************/
@property (nonatomic, strong)  NSMutableAttributedString* attString;     ///< 带有特殊描述的文本信息
@property (nonatomic, strong)  NSMutableArray      *mArrRichTextRuns;    ///< 特殊的文本数组。在绘制的时候绘制
@property (nonatomic, strong)  NSMutableDictionary *mDicRichTextRunRect; ///< 特熟文本的绘图边界字典。用来做点击处理定位
@property (nonatomic, strong)  NSString            *textAnalyzed;        ///< 解析过的文本
@property (nonatomic, assign)  BOOL                hideSpecial;          ///< 去掉所有特殊属性主要针对颜色，默认为NO
@property (nonatomic, assign)  BOOL                hideAllSpecial;          ///< 去掉所有特殊属性主要针对颜色，默认为NO
@property (nonatomic, assign)  BOOL                showPrex;             ///< 是否显示复合数据头信息
@property (nonatomic, assign)  CGFloat             deltaTime;            ///< 控制跑马灯等待时长，默认5秒 kRichPlayDelay_Common

@property (nonatomic, assign) BOOL hasCheckSpecial;    ///< 是否已经过滤了特殊绘制
@property (nonatomic, assign) BOOL isSpecialView;    ///< 是否特殊view显示，在绘制时要控制
@property (nonatomic, strong) UIView *attLabel;    ///< 特殊文本

- (AFFDataPartion*)partionWithIndex:(NSInteger)index;
// 找到第一个有code的
- (AFFDataPartion*)partionWithCode;
// 最后一个
- (AFFDataPartion*)partionLast;

/**
 * 复制所有数据信息
 */
+ (AFFDataText*)initWithDataText:(AFFDataText*)dateText;

- (id)initWithText:(NSString*)text;
- (id)initWithText:(NSString*)text color:(UIColor*)color;
- (id)initWithCode:(U64)code text:(NSString*)text;
- (id)initWithCode:(U64)code text:(NSString*)text color:(UIColor*)color;
- (id)initWithCode:(U64)code pType:(AFEPartionType)pType eleCode:(U64)eleCode text:(NSString*)text;
- (id)initWithCode:(U64)code pType:(AFEPartionType)pType eleCode:(U64)eleCode text:(NSString*)text color:(UIColor*)color;

/**
 设置字符串
 */
//-(void)decodeFromText:(NSString*)text;


/**
 添加纯文本  所以text一定要有值
 */
- (void)addText:(NSString*)text;
- (void)addText:(NSString*)text color:(UIColor*)color;
- (void)insertText:(NSString*)text;
- (void)insertText:(NSString*)text color:(UIColor*)color;

/**
 * 适用于明确知道要获得什么类型的数据，如群昵称、工作圈、居住圈名称等，一般人名称处理用的到）；获取后街商品
 * @param  code  5素code（一般是人）
 * @param  pType  partion的类型
 * @param  text  如果有名称赋值上
 * @param  eleCode  辅助code，如商家code，小区code等；后街商品商家
 * @param  color 自定义颜色
 
 * @return
 */
- (void)addCode:(U64)code pType:(AFEPartionType)pType eleCode:(U64)eleCode text:(NSString*)text;
- (void)addCode:(U64)code pType:(AFEPartionType)pType eleCode:(U64)eleCode text:(NSString*)text color:(UIColor*)color;

/**
 适用于个人、群等5素的code（必须有独立的_Anyfish_Type_xx类型）
 */
- (void)addCode:(U64)code text:(NSString*)text;
- (void)addCode:(U64)code text:(NSString*)text color:(UIColor*)color;

/**
 适用于鱼数据获取 type = 鱼对应产品号
 */
- (void)addFish:(U64)type text:(NSString*)text;
- (void)addFish:(U64)type text:(NSString*)text color:(UIColor*)color;

/**
 适用于鱼章获取 code = playercode
 */
- (void)addFishSeal:(U64)code text:(NSString*)text;
- (void)addFishSeal:(U64)code text:(NSString*)text color:(UIColor*)color;

/**
 * 适用于获取商家船数据
 */
- (void)addEntitySeal:(U64)code text:(NSString*)text;
- (void)addEntitySeal:(U64)type text:(NSString*)text color:(UIColor*)color;

/**
 适用于LandCode,获取经纬度后，获取详细位置
 */
- (void)addCodeLand:(U64)code text:(NSString*)text;
- (void)addCodeLand:(U64)code text:(NSString*)text color:(UIColor*)color;

/**
 适用于获取地理位置
 */
- (void)addLocationLon:(S32)longtitude lat:(S32)latitude text:(NSString*)text;
- (void)addLocationLon:(S32)longtitude lat:(S32)latitude text:(NSString*)text color:(UIColor*)color;
- (void)addLocationLon:(S32)longtitude lat:(S32)latitude needDetail:(BOOL)needDetail text:(NSString*)text;
- (void)addLocationLon:(S32)longtitude lat:(S32)latitude needDetail:(BOOL)needDetail text:(NSString*)text color:(UIColor*)color;

/**
 * 适用于获取企业
 */
- (void)addCodeCompany:(U64)code text:(NSString*)text;
- (void)addCodeCompany:(U64)code text:(NSString*)text color:(UIColor*)color;

/**
 * 获取职员对应角色名称
 */
- (void)addCodeWorkRole:(U64)code role:(U32)role;
- (void)addCodeWorkRole:(U64)code role:(U32)role color:(UIColor*)color;

/**
 鱼报
 */
- (void)addCodePaper:(U64)code text:(NSString*)text;
- (void)addCodePaper:(U64)code text:(NSString*)text color:(UIColor*)color;

/**
 * 居住圈
 */
- (void)addCodeLive:(U64)code text:(NSString*)text;
- (void)addCodeLive:(U64)code text:(NSString*)text color:(UIColor*)color;

/**
 * 获取街巷名称
 */
- (void)addCodeStreet:(U64)code text:(NSString*)text;
- (void)addCodeStreet:(U64)code text:(NSString*)text color:(UIColor*)color;

/**
 * 获取套餐名称；获取商品请直接使用- (void)addCode:(U64)code pType:(AFEPartionType)pType eleCode:(U64)eleCode text:(NSString*)tex
 以上支持请在只有商品code+商家code，或者只有套餐code情况下使用
 */
- (void)addCodeBate:(U64)code text:(NSString*)text;
- (void)addCodeBate:(U64)code text:(NSString*)text color:(UIColor*)color;

/**
 * 捕手 - 商圈信息
 */
- (void)addCodeGMCircle:(U64)code text:(NSString*)text;
- (void)addCodeGMCircle:(U64)code text:(NSString*)text color:(UIColor*)color;

/**
 * 捕手 - 淘宝客商品信息
 */
- (void)addCodeGMTBao:(U64)code text:(NSString*)text;
- (void)addCodeGMTBao:(U64)code text:(NSString*)text color:(UIColor*)color;

// ------- 特殊组合部分 --------
/**
 * 特殊绘制使用
 */
- (void)addTextEx:(NSString *)text;
- (void)addTextEx:(NSString *)text txtColor:(UIColor*)txtColor;

/**
 * 添加自定view，如果没有设置size，内部会直接按照字体控制
 */
- (void)addView:(UIView*)view;

/**
 * 添加按钮，如果没有设置size，内部会直接按照字体控制
 * @param  tag 响应目标
 * @param  title  标题
 * @param  txtColor  文本颜色
 * @param  bgColor 背景色
 * @param  corner 圆角大小
 */
- (void)addButton:(NSInteger)tag title:(NSString*)title txtColor:(UIColor*)txtColor font:(UIFont*)font bgColor:(UIColor*)bgColor corner:(CGFloat)corner;
- (void)addButton:(NSInteger)tag title:(NSString*)title txtColor:(UIColor*)txtColor font:(UIFont*)font bgColor:(UIColor*)bgColor corner:(CGFloat)corner  borderColor:(UIColor*)borderColor borderWidth:(CGFloat)borderWidth;

/**
 * 添加特殊显示label，如果没有设置size，内部会直接按照字体控制；一般文本直接addText
 * @param  tag 响应目标
 * @param  title  标题
 * @param  txtColor  文本颜色
 * @param  bgColor 背景色
 * @param  corner 圆角大小 -1高度一半
 */
- (void)addLabel:(NSInteger)tag title:(NSString*)title txtColor:(UIColor*)txtColor font:(UIFont*)font bgColor:(UIColor*)bgColor corner:(float)corner;
- (void)addLabel:(NSInteger)tag title:(NSString*)title txtColor:(UIColor*)txtColor font:(UIFont*)font bgColor:(UIColor*)bgColor corner:(float)corner borderColor:(UIColor*)borderColor borderWidth:(CGFloat)borderWidth;

/**
 * 添加图片，如果没有设置size，内部会直接按照字体控制；
 * @param  imgName  图片名称
 */
- (void)addImage:(NSString*)imgName;

/**
 * 添加图片，如果没有设置size，内部会直接按照字体控制；
 * @param  imgName  图片名称
 * @param  size  图片大小
 */
- (void)addImage:(NSString*)imgName size:(CGSize)size;

/**
 * 添加图片，如果没有设置size，内部会直接按照字体控制；
 * @param  imgName  图片名称
 * @param  alignment  对齐方式 0=top 底部齐平 向上伸展, 1=center 中心齐平,2=bottom 顶部齐平 向下伸展
 * @param  size  图片大小
 */
- (void)addImage:(NSString*)imgName size:(CGSize)size alignment:(U8)alignment;

// ------- end --------

/**
 根据文本位置定位对象
 */
- (AFFDataPartion*)partion:(NSRange)range;

+ (AFEPartionType)getTypeFromCode:(U64)code;
/** 
 * @function
 * 说明 UI调用此方法拉取数据
 * @param dic   默认为nil，根据code可获取（关键字：key=？
 * @param block 主线程快代码
 
 * @return
*/
- (void)pullDataWithConfig:(NSDictionary*)config block:(void (^)(BOOL result, id dataText))block;
- (void)pullDataWithConfigMulti:(NSDictionary*)config block:(void (^)(BOOL result,id dataText))block;

/**
 * 获取头像，仅为单独显示一个名称时提供获取其头像的方法
 * @param  config  默认为nil，通过code判断拉取类型（如果需要附加条件才需要传入）
 
 * @return 回调通知结果  objCode作为标识判断哪个数据回来了
 */
- (void)pullIconWithConfig:(NSDictionary*)config block:(void(^)(BOOL result, id dataText))block;

/**
 清除所有描述信息
 */
- (void)removeAllText;

- (void)cleanPullTag;

/**
 * 尝试检查拉取缓存情况，目前在richText中使用
 */
- (void)checkDataPulled;

/**
 添加一个解析对象
 */
- (void)addTextPartion:(AFFDataPartion*)partion;

/**
 * 仅拷贝列表数据,partion 会被拷贝
 */
- (void)addDataText:(AFFDataText*)dataText;

/**
 * 直接添加partion，不会拷贝
 */
- (void)addDataPartion:(AFFDataText*)dataText;

/**
 * 只处理partion数据
 */
- (void)updateWithMsgText:(AFFDataText*)msgText;

+ (void)updateCacheData:(U64)code eleCode:(U64)eleCode pType:(AFEPartionType)pType data:(NSObject*)data isName:(BOOL)isName;

// 缓存我贴章人的鱼章
+ (void)setCacheSealSign:(AFFData*)sign;
+ (BOOL)setCacheSealSigns:(NSArray*)signs;

+ (void)setCacheData:(AFFDataPartion*)partion isName:(BOOL)isName;

// 好友列表界面使用
+ (void)checkFriends:(NSArray*)arr;

// 批量处理
+ (void)setCacheData:(NSArray*)arr partion:(AFFDataPartion*)partion;

+ (AFEPartionType)getCachePartionType:(AFFDataPartion*)partion isName:(BOOL)isName;

/**
 * 清理缓存，需要特别注意，如果
 1. code=0,eleCode=0 标示清理整个类型
 2. code>0,eleCode=0 标示清理相同code的数据
 3. code=0,eleCode>0 标示清理某个大数据类型
 
 * @param  pType  缓存类型（必填）
 * @param  code 缓存数据唯一标识
 * @param  eleCode  大类数据code，如商家、社区等
 * @param  isName 是否名称
 
 * @return   
 */
+ (void)cleanCache:(AFEPartionType)pType code:(U64)code eleCode:(U64)eleCode isName:(BOOL)isName;

+ (void)cleanSelf;

@end
